package cn.jellybmedia.basic.controller;

import cn.jellybmedia.basic.exception.BusinessException;
import cn.jellybmedia.basic.service.ILoginService;
import cn.jellybmedia.basic.utils.AjaxResult;
import cn.jellybmedia.basic.vo.LoginVo;
import cn.jellybmedia.basic.vo.PhoneLoginVo;
import cn.jellybmedia.basic.vo.RegisterVo;
import cn.jellybmedia.basic.vo.WechatVo;
import cn.jellybmedia.user.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLOutput;
import java.util.HashMap;

@RestController
@RequestMapping("/login")
public class LoginController {

    @Autowired
    private ILoginService loginServiceImpl;

    /**======================================================================================
    * @Title: account
    * @Description: 登录
    * @Author: Mr.Zhang
    * @Version: 1.0
    * @Date:  2022/7/9 9:29
    * @Parameters: [loginVo]
    * @Return cn.jellybmedia.basic.utils.AjaxResult
    ======================================================================================*/
    @PostMapping("/account")
    public AjaxResult account(@RequestBody LoginVo loginVo) {
        try {
            HashMap<String,Object> map= loginServiceImpl.account(loginVo);
            return AjaxResult.getAjaxResult().setResultObj(map);
        } catch (BusinessException e) {
            e.printStackTrace();
            return AjaxResult.getAjaxResult().setSuccess(false).setMessage(e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error();
        }
    }

    /**======================================================================================
    * @Title: quitLogin
    * @Description: 退出登录
    * @Author: Mr.Zhang
    * @Version: 1.0
    * @Date:  2022/7/9 9:28
    * @Parameters: [loginVo]
    * @Return cn.jellybmedia.basic.utils.AjaxResult
    ======================================================================================*/
    @PostMapping("/quitLogin")
    public AjaxResult quitLogin(@RequestBody LoginVo loginVo) {
        try {
            return AjaxResult.getAjaxResult();
        } catch (BusinessException e) {
            e.printStackTrace();
            return AjaxResult.getAjaxResult().setSuccess(false).setMessage(e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error();

        }
    }


    /**======================================================================================
     * @Title: loginPhone
     * @Description: 手机验证登录
     * @Author: Mr.Zhang
     * @Version: 1.0
     * @Date:  2022/7/9 10:15
     * @Parameters: [loginVo]
     * @Return cn.jellybmedia.basic.utils.AjaxResult
    ======================================================================================*/
    @PostMapping("/loginPhone")
    public AjaxResult loginPhone(@RequestBody PhoneLoginVo phoneLoginVo) {
        try {
            HashMap<String, Object> map = loginServiceImpl.loginPhone(phoneLoginVo);

            return AjaxResult.getAjaxResult().setResultObj(map);
        } catch (BusinessException e) {
            e.printStackTrace();
            return AjaxResult.getAjaxResult().setSuccess(false).setMessage(e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error();
        }
    }


    /**======================================================================================
    * @Title: loginWechat
    * @Description: 微信登录接口
    * @Author: Mr.Zhang
    * @Version: 1.0
    * @Date:  2022/7/10 17:03
    * @Parameters: [wechatVo]
    * @Return cn.jellybmedia.basic.utils.AjaxResult
    ======================================================================================*/
    @PostMapping("/wechat")
    public AjaxResult loginWechat(@RequestBody WechatVo wechatVo) {
        try {
            // 因为我在业务层进行的返回AjaxResult,所以这时候我直接返回最后结果就行了
            return loginServiceImpl.loginWechat(wechatVo);
        } catch (BusinessException e) {
            e.printStackTrace();
            return AjaxResult.getAjaxResult().setSuccess(false).setMessage(e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error();
        }
    }

    /**======================================================================================
    * @Title: wechatbinder
    * @Description: 微信绑定我们自己平台的账号
    * @Author: Mr.Zhang
    * @Version: 1.0
    * @Date:  2022/7/10 18:38
    * @Parameters: [wechatVo]
    * @Return cn.jellybmedia.basic.utils.AjaxResult
    ======================================================================================*/
    @PostMapping("/wechat/binder")
    public AjaxResult wechatbinder(@RequestBody WechatVo wechatVo) {
        try {
            HashMap<String, Object> map = loginServiceImpl.wechatbinder(wechatVo);

            return AjaxResult.getAjaxResult().setResultObj(map);
        } catch (BusinessException e) {
            e.printStackTrace();
            return AjaxResult.getAjaxResult().setSuccess(false).setMessage(e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return AjaxResult.error();
        }
    }

}
